/**
 * 数据导出工具
 */

const fs = require('fs');
const path = require('path');

/**
 * 将数据导出为CSV格式
 * @param {Array} data 数据数组
 * @param {Array} headers 表头数组 [{id: 'name', title: '姓名'}, ...]
 * @param {string} filename 文件名
 * @returns {string} 文件路径
 */
const exportToCsv = (data, headers, filename) => {
  // 确保导出目录存在
  const exportDir = path.join(__dirname, '..', 'exports');
  if (!fs.existsSync(exportDir)) {
    fs.mkdirSync(exportDir, { recursive: true });
  }
  
  // 生成CSV内容
  const headerRow = headers.map(h => `"${h.title}"`).join(',');
  
  const rows = data.map(item => {
    return headers.map(header => {
      const value = item[header.id];
      // 处理特殊字符，避免CSV格式问题
      if (value === null || value === undefined) {
        return '""';
      }
      return `"${String(value).replace(/"/g, '""')}"`;
    }).join(',');
  });
  
  const csvContent = [headerRow, ...rows].join('\n');
  
  // 添加BOM标记，使Excel正确识别UTF-8编码
  const bom = '\uFEFF';
  const csvContentWithBom = bom + csvContent;
  
  // 保存文件
  const timestamp = new Date().getTime();
  const filePath = path.join(exportDir, `${filename}_${timestamp}.csv`);
  fs.writeFileSync(filePath, csvContentWithBom, 'utf8');
  
  return filePath;
};

/**
 * 将简历数据导出为CSV
 * @param {Array} resumes 简历数据
 * @param {string} filename 文件名
 * @returns {string} 文件路径
 */
const exportResumesToCsv = (resumes, filename = 'resumes') => {
  const headers = [
    { id: 'id', title: 'ID' },
    { id: 'name', title: '姓名' },
    { id: 'gender', title: '性别' },
    { id: 'age', title: '年龄' },
    { id: 'phone', title: '电话' },
    { id: 'email', title: '邮箱' },
    { id: 'education', title: '学历' },
    { id: 'school', title: '学校' },
    { id: 'major', title: '专业' },
    { id: 'experience', title: '工作经验' },
    { id: 'skills', title: '技能' },
    { id: 'expectation', title: '期望' },
    { id: 'status', title: '状态' },
    { id: 'remark', title: '备注' },
    { id: 'invitationTitle', title: '邀请标题' },
    { id: 'position', title: '职位' },
    { id: 'department', title: '部门' },
    { id: 'createdAt', title: '提交时间' }
  ];
  
  // 处理数据，添加关联信息
  const processedData = resumes.map(resume => {
    const data = { ...resume.dataValues };
    
    // 添加邀请信息
    if (resume.Invitation) {
      data.invitationTitle = resume.Invitation.title;
      data.position = resume.Invitation.position;
      data.department = resume.Invitation.department;
    }
    
    // 格式化日期
    if (data.createdAt) {
      data.createdAt = new Date(data.createdAt).toLocaleString('zh-CN');
    }
    
    return data;
  });
  
  return exportToCsv(processedData, headers, filename);
};

module.exports = {
  exportToCsv,
  exportResumesToCsv
}; 